#  numpy 数组
# ndarray.ndim  数组轴的个数，在python的世界中，轴的个数被称作秩
# ndarray.shape    数组的维度。这是一个指示数组在每个维度上大小的整数元组。例如一个n排m列的矩阵，它的shape属性将是(2,3),这个元组的长度显然是秩，即维度或者ndim属性
#ndarray.size  数组元素的总个数，等于shape属性中元组元素的乘积。
#ndarray.dtype  一个用来描述数组中元素类型的对象，可以通过创造或指定dtype使用标准Python类型。另外Numpy提供它自己的数据类型。
#ndarray.itemsize  数组中每个元素的字节大小。例如，一个元素类型为float64的数组itemsiz属性值为8(=64/8),又如，一个元素类型为complex32的数组item属性为4(=32/8).
#ndarray.data      包含实际数组元素的缓冲区，通常我们不需要使用这个属性，因为我们总是通过索引来使用数组中的元素。
import numpy as np
#创建一维数组
#方法一  np.array(列表)

d=np.array([1,2,4,5])
print(d)             #[1 2 4 5]
#方法二   np.arange(开始数值，结束数值，步长)     步长默认为1
n=np.arange(2,19,2)
print(n)             #[ 2  4  6  8 10 12 14 16 18]

#创建二维数组
#  np.array([列表1，列表2，列表3，列表4])  列表长度必须一致
list1=[1,2,3]
list2=[4,5,6]
g=np.array([list1,list2])
print(g)             #[[1 2 3]  [4 5 6]]

# from numpy  import *
# a = arange(15).reshape(3, 5)
# print(a )
# print(a.shape)    #   (3, 5)
# print(a.ndim )
# print(a.dtype.name)
# print(a.itemsize )
# print(a.size)
###
# ##3. 创建一个长度为10的空向量3. 创建一个长度为10的空向量
# import numpy as np
# Z = np.zeros(10)
# print(Z)
####4. 如何找到任何一个数组的内存大小？
# import numpy as np
# Z = np.zeros((10,10))
# print("%d bytes" % (Z.size * Z.itemsize))
###6. 创建一个长度为10并且除了第五个值为1的空向量
# import numpy as np
# Z = np.zeros(10)
# Z[4] = 1
# print(Z)
###7. 创建一个值域范围从10到49的向量     (提示: np.arange)
# import numpy as np
# Z = np.arange(10,50)
# print(Z)
###9. 创建一个 3x3 并且值从0到8的矩阵    (提示: reshape)   (提示: np.arange)
# import numpy as np
# Z = np.arange(9).reshape(3,3)
# print(Z)
###10. 找到数组[1,2,0,0,4,0]中非0元素的位置索引   (提示: np.nonzero)
# import numpy as np
# z = np.nonzero([1,2,0,0,4,0])
# print(z)
# 11. 创建一个 3x3 的单位矩阵 (★☆☆)¶    (提示: np.eye)
# import numpy as np
# Z = np.eye(3)
# print(Z)
# 12. 创建一个 3x3x3的随机数组 (★☆☆)¶  (提示: np.random.random)
# import numpy as np
# Z = np.random.random((3,3,3))
# print(Z)
# 13. 创建一个 10x10 的随机数组并找到它的最大值和最小值 (★☆☆)¶    (提示: min, max)
# import numpy as np
# Z = np.random.random((10,10))
# Zmin, Zmax = Z.min(), Z.max()
# print(Zmin, Zmax)
# 14. 创建一个长度为30的随机向量并找到它的平均值 (★☆☆)¶   (提示: mean)
# import numpy as np
# Z = np.random.random(30)
# m = Z.mean()
# print(m)
# 15. 创建一个二维数组，其中边界值为1，其余值为0 (★☆☆)¶
# (提示: array[1:-1, 1:-1])
# import numpy as np
# Z = np.ones((10,10))
# Z[1:-1,1:-1] = 0
# print(Z)
# 18. 创建一个 5x5的矩阵，并设置值1,2,3,4落在其对角线下方位置 (★☆☆)¶
# (提示: np.diag)
# import numpy as np
# Z = np.diag(1+np.arange(4),k=-1)
# print(Z)
# 24. 一个5x3的矩阵与一个3x2的矩阵相乘，实矩阵乘积是什么？ (★☆☆)¶
# (提示: np.dot | @)
# import numpy as np
# Z = np.dot(np.ones((5,3)), np.ones((3,2)))
# print(Z)
# 25. 给定一个一维数组，对其在3到8之间的所有元素取反 (★☆☆)
# (提示: >, <=)
# import numpy as np
# Z = np.arange(11)
# Z[(3 < Z) & (Z <= 8)] *= -1
# print(Z)
# 33. 如何得到昨天，今天，明天的日期? (★☆☆)¶
# (提示: np.datetime64, np.timedelta64)
# import numpy as np
# yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D')
# today     = np.datetime64('today', 'D')
# tomorrow  = np.datetime64('today', 'D') + np.timedelta64(1, 'D')
# print ("Yesterday is " + str(yesterday))
# print ("Today is " + str(today))
# print ("Tomorrow is "+ str(tomorrow))
# 37. 创建一个5x5的矩阵，其中每行的数值范围从0到4 (★★☆)
# (提示: np.arange)
# import numpy as np
# Z = np.zeros((5,5))
# Z += np.arange(5)
# print (Z)